Tomcatで.doや.jspをhtmlに見せるRewriteValve
渡辺です。 札幌は雪祭りがはじまりました。 今年も初音ミクの露出は多いですねー。
さて、昨今はほとんど見かけなくなりましたが、ウェブサイトにアクセスした時、「/login.do」とか「/shohin.jsp」のようなURLを見ることがあります。 イントラの業務アプリならば兎も角、公開サイトでこんなURLを見ると残念な気持ちになるのは自分だけでしょうか? バックエンドでTomcatなどWebアプリケーションサーバが稼働しているという情報を公開しているのに等しく、セキュリティの意識が低い運営会社だなと感じてしまうからです。
Tomcatではお手軽にURLを偽装できる方法があるので、その方法を紹介します。
Rewrite Valve
Tomcatの固有機能のRewrite ValveはApacheのmod_rewriteと同様の機能を提供します。 つまり、Tomcat単体で、外部から.htmlでアクセスしてきたURLを、内部的に.doや*.jspに書き換えることができます。
もちろん、Apacheのmod_rewriteを利用すれば、Rewrite Valveを利用する必要はありません。 しかし、AWS環境でTomcatを運用する場合は、前段にELBを配置し、静的コンテンツはCloudFrontでキャッシュするパターンが多いと思います。 したがって、Tomcatの前段にApacheを置く必要がありません。 Tomcat単体でELBから8080ポートなどへフォワードする方がシンプルです。
Rewrite Valveの設定
Rewrite Valveの設定方法は簡単です。
まず、RewriteValveを有効化するために、context.xmlのValueとして org.apache.catalina.valves.rewrite.RewriteValve を追加します。
<Context> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> </Context>
Amazon Linuxにyumでtomcat8をインストールしたならば、/etc/tomcat8/context.xml です。
次に、アプリケーションのWEB-INFの下にrewrite.config を追加します。 例えば、拡張子がhtmlの全てのリクエストを.doとして処理するならば、次のような設定です。
RewriteRule ^(.*)\.html$ $1.do [L]
記述ルールはmod_rewriteと同じなのでドキュメントなどを参照してください。
後は再起動すれば、アクセスするURLが、 /login.html であっても内部的には /login.do が呼び出されます。 ただし、画面に埋め込まれたリンクなども拡張子をhtmlに変更する必要がありますのでご注意ください。
まとめ
Rewrite Valveを利用すれば、簡単にURLを偽装することができます。 これでストラッツを使っていることがばれませんね!:)
以上、Tomcatの小ネタでした。